trigger Account_UpdateLeadFields on Account (after update) {
    if(LeadSync_AsyncApex.firstTrigger == true){
        
        // Build a Set of Accounts
        System.Debug('================> Started Account Trigger');
        Set<Id> Accounts = new Set<Id>();
        Set<Id> AccountOwnerChanges = new Set<Id>();
        for(Integer i=0;i<Trigger.New.size();i++){
                // FIELD LIST
            if( Trigger.New[i].Status__c<>Trigger.Old[i].Status__c ||
                Trigger.New[i].Status_Explanation__c<>Trigger.Old[i].Status_Explanation__c ||
                Trigger.New[i].OwnerId <> Trigger.Old[i].OwnerId ||
                Trigger.New[i].Name<>Trigger.Old[i].Name ||
                Trigger.New[i].CRM_System__c<>Trigger.Old[i].CRM_System__c ||
                Trigger.New[i].Salesforce_Verified__c <>Trigger.Old[i].Salesforce_Verified__c){
                Accounts.add(Trigger.New[i].Id);
                if(Trigger.New[i].OwnerId <> Trigger.Old[i].OwnerId){
                    AccountOwnerChanges.add(Trigger.New[i].Id);
                }
            }
        }
        
        if(Accounts.size()>0){
            LeadSync_AsyncApex.firstTrigger = false;
            System.Debug('================> Found ' +Accounts.size()+ ' Accounts to Update');
            LeadSync_AsyncApex.SyncAccountInfo(Accounts, AccountOwnerChanges);
            System.Debug('================> Syncing Info for these Accounts: '+Accounts);
        }
        else{
            System.Debug('================> Found no Accounts to Update');
        }
        System.Debug('================> End of Account Trigger');
    }
}